りおんクロニクル


C#でINI/JSON設定ファイルを扱う|読み書き・自動保存・DI連携の実務ガイド【2026年版】

Home【2026年版】C# / .NET入門と実践ガイド|基礎・業務アプリ開発・SQLite連携まで体系的に解説

業務アプリでは、 「設定値を外部ファイルに保存したい」 というニーズが必ず出てきます。 C#では、昔ながらの INIファイル と、 .NET標準の JSON設定ファイル(appsettings.json) の2つがよく使われます。

この記事でわかること
・INIファイルの読み書き(Win32 API / ライブラリ)
・JSON設定ファイル(appsettings.json)の扱い方
・設定クラスへのバインド
・自動保存・自動読み込み
・WPF/WinFormsでの設定管理
・業務アプリ向けベストプラクティス

1. INIファイルとJSON設定の違い

項目INIJSON
形式古典的・シンプル構造化・階層化
読みやすさ
複雑な設定
標準サポートなし(Win32 API)あり(Configuration API)
用途小規模設定・レガシー互換業務アプリ全般

軽い設定 → INI アプリ全体の設定 → JSON(appsettings.json)

2. INIファイルを扱う(Win32 API)

INIは Windows の Win32 API を使って読み書きできます。

■ 2-1. INI読み書きクラス

using System.Runtime.InteropServices;
using System.Text;

public class IniFile
{
    private readonly string _path;

    public IniFile(string path) => _path = path;

    [DllImport("kernel32", CharSet = CharSet.Unicode)]
    private static extern int GetPrivateProfileString(
        string section, string key, string defaultValue,
        StringBuilder retVal, int size, string filePath);

    [DllImport("kernel32", CharSet = CharSet.Unicode)]
    private static extern long WritePrivateProfileString(
        string section, string key, string value, string filePath);

    public string? Read(string section, string key)
    {
        var sb = new StringBuilder(1024);
        GetPrivateProfileString(section, key, "", sb, sb.Capacity, _path);
        return sb.ToString();
    }

    public void Write(string section, string key, string value)
    {
        WritePrivateProfileString(section, key, value, _path);
    }
}

■ 2-2. INIの読み書き例

var ini = new IniFile("config.ini");

ini.Write("App", "UserName", "Taro");
string? name = ini.Read("App", "UserName");

■ 2-3. INIファイル例

[App]
UserName=Taro
WindowWidth=1280
WindowHeight=720

小規模設定ならINIはとても扱いやすいです。

3. JSON設定ファイル(appsettings.json)を扱う

.NET では JSON 設定が標準でサポートされており、 Configuration API を使うと簡単に扱えます。

■ 3-1. appsettings.json

{
  "App": {
    "UserName": "Taro",
    "Window": {
      "Width": 1280,
      "Height": 720
    }
  }
}

■ 3-2. 設定クラスを作る

public class AppSettings
{
    public string UserName { get; set; } = "";
    public WindowSettings Window { get; set; } = new();
}

public class WindowSettings
{
    public int Width { get; set; }
    public int Height { get; set; }
}

■ 3-3. 設定を読み込む(.NET 6+)

using Microsoft.Extensions.Configuration;

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

var settings = config.GetSection("App").Get<AppSettings>();

reloadOnChange: true にすると、ファイル変更時に自動で再読み込みされます。

4. 設定の自動保存(JSON)

ユーザーが設定を変更したら、自動で保存したいケースがあります。

■ 4-1. 設定を保存するメソッド

public static void SaveSettings(AppSettings settings)
{
    var json = JsonSerializer.Serialize(settings, new JsonSerializerOptions
    {
        WriteIndented = true
    });

    File.WriteAllText("appsettings.json", json);
}

■ 4-2. 設定変更 → 保存

settings.UserName = "Hanako";
SaveSettings(settings);

WPFなら ViewModel の PropertyChanged で保存するのもアリです。

5. WPF/WinFormsでの設定管理

■ 5-1. 起動時に読み込み

var settings = LoadSettings();
MainWindow.Width = settings.Window.Width;
MainWindow.Height = settings.Window.Height;

■ 5-2. 終了時に保存

settings.Window.Width = (int)MainWindow.Width;
settings.Window.Height = (int)MainWindow.Height;
SaveSettings(settings);

ウィンドウ位置・サイズの保存は業務アプリでよく使われます。

6. DI(依存性注入)と設定の組み合わせ

ASP.NET Core と同じように、 WPF/WinForms でも設定を DI に登録できます。

■ 6-1. DI登録

builder.Services.Configure<AppSettings>(
    config.GetSection("App"));

■ 6-2. コンストラクタで受け取る

public class MainViewModel
{
    public MainViewModel(IOptions<AppSettings> options)
    {
        var settings = options.Value;
        UserName = settings.UserName;
    }
}

設定を ViewModel やサービス層に安全に渡せます。

7. 業務アプリ向けベストプラクティス

まとめ:INIとJSONを使い分けると“設定管理が圧倒的に楽になる”

「設定を外部ファイルに保存したい」「ユーザー設定を保持したい」 という現場のニーズに対して、 INI と JSON は最も実務的な解決策です。 この記事をベースに、あなたのアプリに最適な設定管理を設計してみてください。

前のページ  次のページ